package com.liugh.asyn;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 异步任务执行listener.
 * J: 异步执行任务类型，R: 成功执行后需要返回的数据
 */
public interface AsyncJobListener <J extends AsyncJob, R> {

    Logger LOGGER = LoggerFactory.getLogger(AsyncJobListener.class);


    /**
     * 异步任务执行之前回调
     * @param asyncJob 需要执行的异步任务
     * @return true：可以执行，false: 终止该次执行
     */
    default boolean beforeExecute(J asyncJob) {
        return true;
    }

    /**
     * 异步执行完毕后的回调
     * @param asyncJob 异步执行任务
     * @return 执行结果
     */
    default void afterExecute(J asyncJob, AsyncJobResult<R> asyncJobResult) {
        if (null == asyncJobResult) {
            LOGGER.warn("AsyncJobListener -> afterExecute: job result is null!");
        } else if (!asyncJobResult.isExecuteSuccess()) {
            LOGGER.warn("AsyncJobListener -> afterExecute: job execute fail!");
            LOGGER.error("异步任务执行失败！", asyncJobResult.getResultException());
        }
    }




}
